﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Data.SqlClient;
using System.Data;

namespace DAO
{
    public static class CuotasDAO
    {

        public static void commitCuotas(Cuota cuo)
        {
            SqlConnection con = DB.conexion();
            SqlTransaction tran = con.BeginTransaction();
            try
            {
                string qry = " INSERT INTO CUOTA VALUES(@cuo_soc_id); SELECT MAX(cuo_id) FROM Cuota; ";
                SqlCommand cmd = new SqlCommand(qry, con, tran);
                cmd.Parameters.Add(new SqlParameter("@cuo_soc_id", cuo.Socio.Id));                
                cuo.Id = (int)cmd.ExecuteScalar();
                foreach (DetalleCuota dc in cuo.Detalle)
                {
                    qry = "INSERT INTO DetalleCuota (dec_cuo_id, dec_cla_id, dec_fecha_inicio, dec_precio, dec_fecha_fin, dec_observaciones, dec_descuento) VALUES (@dec_cuo_id,@dec_cla_id, @dec_fecha_inicio, @dec_precio, @dec_fecha_fin, @dec_observaciones, @dec_descuento);";
                    cmd = new SqlCommand(qry, con, tran);
                    cmd.Parameters.Add(new SqlParameter("@dec_cuo_id", cuo.Id));
                    cmd.Parameters.Add(new SqlParameter("@dec_cla_id", dc.Clase.Id));
                    cmd.Parameters.Add(new SqlParameter("@dec_fecha_inicio", dc.FechaInicio));
                    cmd.Parameters.Add(new SqlParameter("@dec_precio", dc.Precio));
                    cmd.Parameters.Add(new SqlParameter("@dec_fecha_fin",dc.FechaFin));
                    cmd.Parameters.Add(new SqlParameter("@dec_observaciones", dc.Observaciones));
                    cmd.Parameters.Add(new SqlParameter("@dec_descuento", dc.Descuento));
                    cmd.ExecuteNonQuery();
                }
                tran.Commit();
            }
            catch (SystemException)
            {
                tran.Rollback();
            }
            finally
            {
                con.Close();
            }

         
        }
        public static DataTable obtenerInformeCuota(string dni, string fechaDesde, string fechaHasta, Boolean check)
        {
            try
            {
                DataTable dt = new DataTable();
                SqlCommand com = new SqlCommand();
                com.Connection = DB.conexion();
                
                string cmd = "SELECT cuo.cuo_id Id, soc.soc_dni dni ";
                cmd += ", soc.soc_apellido+' '+soc.soc_nombre nombre ";
                cmd += ", de.dec_fecha_inicio fechainicio ";
                cmd += ", de.dec_fecha_fin fechafin ";
                cmd += "FROM Cuota cuo ";
                cmd += ",Socio soc ";
                cmd += ",DetalleCuota de ";
                cmd += "where cuo.cuo_id = de.dec_cuo_id ";
                cmd += "and cuo.cuo_soc_id = soc.soc_id ";

                if (dni != "")
                {
                    cmd += "and soc.soc_dni = @dni ";
                    com.Parameters.Add(new SqlParameter("@dni", dni));
                }
                if (fechaDesde != "")
                {
                    cmd += "and de.dec_fecha_inicio = @fechaD ";
                    com.Parameters.Add(new SqlParameter("@fechaD", fechaDesde));
                }
                if (fechaHasta != "")
                {
                    cmd += "and de.dec_fecha_fin = @fechaF ";
                    com.Parameters.Add(new SqlParameter("@fechaF", fechaHasta));
                }
                if (check == true)
                {
                    cmd += "and exists (select 1 from DetallePago where dep_dec_cuo_id = de.dec_cuo_id)";
                }
                SqlDataAdapter da = new SqlDataAdapter();
                com.CommandText = cmd;
                da.SelectCommand = com;
                da.Fill(dt);
                return dt;
            }
            catch (Exception)
            {
                
                throw;
            }
           
        }

        public static Cuota obtenerCuota(Cuota cuota)
        {
            string query = "SELECT dec_cuo_id,dec_cla_id,dec_fecha_inicio FROM DetalleCuota WHERE dec_cuo_id = @cuotaId";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@cuotaId", cuota.Id));
            List<DetalleCuota> listaDetalleCuo = new List<DetalleCuota>();
            SqlDataReader dr = DB.GenerarReader(query, listaParam);
            while (dr.Read())
            {
                DetalleCuota dc = new DetalleCuota();
                dc.Cuota.Id = int.Parse(dr["dec_cuo_id"].ToString());
                dc.Clase.Id = int.Parse(dr["dec_cla_id"].ToString());
                dc.FechaInicio = DateTime.Parse(dr["dec_fecha_inicio"].ToString());
                listaDetalleCuo.Add(dc);
            }
            dr.Close();
            cuota.Detalle = listaDetalleCuo;
            return cuota;
        }

    }
}
